package es.masterd.ejercicioFinal;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.format.Time;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
/**
 * Actividad que permite modificar los datos de un lugar previamente guardado
 * @author chony
 *
 */
public class EditarLugaresActivity extends Activity {
	private long id;
	private Uri myPicture = null;
	private String fotoTomada = "";
	/**
	 * Se llama cuando se crea la vista
	 * Inicializa la vista y el comportamiento de los botones
	 * @savedInstanceState Bundle Objeto con datos pasados a la vista
	 */
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.editarlugar);

		// comportamiento del boton que guarda el registro en la tabla
		Button botonGuardar = (Button) findViewById(R.id.botonGuardar);
		botonGuardar.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				ContentValues values = new ContentValues();
				values.put("nombre",
						((EditText) findViewById(R.id.edit_nombre)).getText()
								.toString());
				values.put("descripcion",
						((EditText) findViewById(R.id.edit_desc)).getText()
								.toString());
				values.put("foto", fotoTomada);
				int guardado = getContentResolver().update(
						LugaresProvider.CONTENT_URI, values,
						LugaresProvider._ID + "=?", new String[] { "" + id });
				if (guardado > 0) {
					Toast.makeText(getApplicationContext(), "GUARDADO",
							Toast.LENGTH_LONG).show();
					Intent intent = new Intent();
					intent.putExtra(LugaresProvider._ID, id);
					intent.setClass(getApplicationContext(),
							MostrarLugarActivity.class);
					startActivity(intent);
				} else {// el elemento no se ha podido guardar
					Toast.makeText(getApplicationContext(),
							"El lugar no se ha podido guardar",
							Toast.LENGTH_LONG).show();
					Log.e("ERROR", "No se ha podido modificar el registro");
				}
			}
		});
		// comportamiento del boton que vuelve a la pantalla anterior
		Button botonVolver = (Button) findViewById(R.id.botonVolver);
		botonVolver.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				finish();
			}
		});
	}
	/**
	 * Metodo que se llama al iniciar la vista, antes de mostrarla
	 * Recoje los datos obtenidos del Bundle que ha rellenado la vista llamante
	 * Con esos datos rellena los campos de la vista
	 */
	public void onStart() {
		super.onStart();

		try {
			Bundle extras = getIntent().getExtras();
			id = extras.getLong(LugaresProvider._ID);
			Uri uri = ContentUris.withAppendedId(
					Uri.parse(LugaresProvider.CONTENT_URI + "/#"), id);

			Cursor cursor = getContentResolver().query(uri, null, null, null,
					null);

			if ((cursor != null) && cursor.moveToFirst()) {
				fotoTomada = cursor.getString(3);
				myPicture = Uri.parse(fotoTomada);
				((EditText) findViewById(R.id.edit_nombre)).setText(cursor
						.getString(1));
				((EditText) findViewById(R.id.edit_desc)).setText(cursor
						.getString(2));
				if (!"".equals(fotoTomada))
					((ImageView) findViewById(R.id.edit_foto))
							.setImageURI(myPicture);
				else
					((ImageView) findViewById(R.id.edit_foto))
							.setImageDrawable(getResources().getDrawable(
									R.drawable.icon));

			}
		} catch (Exception e) {
			Log.e("ERROR", e.getLocalizedMessage());
		}
	}
	/**
	 * Realiza una llamada a la camara del terminal para tomar una foto
	 * @param view Vista desde la que se ha llamado al metodo
	 */
	public void captureImage(View view) {
		Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.EMPTY);
		startActivityForResult(i, 2);
	}
	/**
	 * Recoje los datos devueltos por la camara
	 * Guarda la imagen en la tarjeta SD del terminal
	 * @requestCode Codigo esperado, para identificar la llamada
	 * @resultCode Codigo de resultado
	 * @data Datos devueltos por la camara
	 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == 2 && resultCode == Activity.RESULT_OK) {
			Bitmap bm = (Bitmap) data.getExtras().get("data");
			((ImageView) findViewById(R.id.edit_foto)).setImageBitmap(bm);
			try {
				Time time = new Time();
				time.setToNow();
				String fileName = time.format("%Y%m%d%H%M%S");
				String path = Environment.getExternalStorageDirectory()
						.toString() + "/lugares_para_recordar/images/";
				File dir = new File(path);
				dir.mkdirs();
				OutputStream fOut = null;
				File file = new File(path, "IMAGEN_LUGAR_" + fileName + ".jpg");
				file.createNewFile();//se guarda el fichero en la tarjeta SD
				fOut = new FileOutputStream(file);

				bm.compress(Bitmap.CompressFormat.JPEG, 90, fOut);
				myPicture = Uri.fromFile(file);//se guarda le Uri del fichero con la foto tomada
				fotoTomada = myPicture.toString();//se guarda la cadena de la Uri del ficheross
				fOut.flush();
				fOut.close();

				MediaStore.Images.Media.insertImage(getContentResolver(),
						file.getAbsolutePath(), file.getName(), file.getName());
			} catch (Exception ex) {
				Log.e("ERROR al guardar el fichero", ex.getMessage());
			}
		}
	}
	/**
	 * Comportamiento de la tecla ATRAS del terminal
	 * @keyCode int Codigo de la tecla pulsada
	 * @event KeyEvent Evento que ha provocado la llamada al metodo
	 */
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			Intent intent = new Intent();
			setResult(RESULT_OK, intent);
			finish();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
}